universal-mcp-applications 0.1.2__py3-none-any.whl → 0.1.3__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (80) hide show
  1. universal_mcp/applications/airtable/app.py +1 -0
  2. universal_mcp/applications/apollo/app.py +1 -0
  3. universal_mcp/applications/aws_s3/app.py +3 -4
  4. universal_mcp/applications/bill/app.py +3 -3
  5. universal_mcp/applications/box/app.py +2 -6
  6. universal_mcp/applications/braze/app.py +2 -6
  7. universal_mcp/applications/cal_com_v2/app.py +22 -64
  8. universal_mcp/applications/confluence/app.py +1 -0
  9. universal_mcp/applications/contentful/app.py +8 -19
  10. universal_mcp/applications/digitalocean/app.py +9 -27
  11. universal_mcp/applications/{domain-checker → domain_checker}/app.py +2 -1
  12. universal_mcp/applications/elevenlabs/app.py +98 -3188
  13. universal_mcp/applications/falai/app.py +1 -0
  14. universal_mcp/applications/file_system/__init__.py +1 -0
  15. universal_mcp/applications/file_system/app.py +96 -0
  16. universal_mcp/applications/fireflies/app.py +4 -3
  17. universal_mcp/applications/fpl/app.py +1 -0
  18. universal_mcp/applications/fpl/utils/fixtures.py +1 -1
  19. universal_mcp/applications/fpl/utils/helper.py +1 -1
  20. universal_mcp/applications/fpl/utils/position_utils.py +0 -1
  21. universal_mcp/applications/{ghost-content → ghost_content}/app.py +2 -1
  22. universal_mcp/applications/github/app.py +3 -1
  23. universal_mcp/applications/google_calendar/app.py +2 -1
  24. universal_mcp/applications/google_docs/app.py +1 -1
  25. universal_mcp/applications/google_drive/app.py +2 -1
  26. universal_mcp/applications/google_gemini/app.py +138 -618
  27. universal_mcp/applications/google_mail/app.py +2 -1
  28. universal_mcp/applications/{google-searchconsole → google_searchconsole}/app.py +1 -1
  29. universal_mcp/applications/google_sheet/app.py +2 -1
  30. universal_mcp/applications/google_sheet/helper.py +156 -116
  31. universal_mcp/applications/hashnode/app.py +1 -0
  32. universal_mcp/applications/{http-tools → http_tools}/app.py +2 -1
  33. universal_mcp/applications/hubspot/app.py +4 -1
  34. universal_mcp/applications/jira/app.py +7 -18
  35. universal_mcp/applications/markitdown/app.py +2 -3
  36. universal_mcp/applications/ms_teams/app.py +1 -1
  37. universal_mcp/applications/openai/app.py +2 -3
  38. universal_mcp/applications/outlook/app.py +1 -3
  39. universal_mcp/applications/pipedrive/app.py +2 -6
  40. universal_mcp/applications/reddit/app.py +1 -0
  41. universal_mcp/applications/replicate/app.py +3 -3
  42. universal_mcp/applications/resend/app.py +1 -2
  43. universal_mcp/applications/rocketlane/app.py +1 -0
  44. universal_mcp/applications/semrush/app.py +1 -1
  45. universal_mcp/applications/sentry/README.md +20 -20
  46. universal_mcp/applications/sentry/app.py +40 -40
  47. universal_mcp/applications/serpapi/app.py +2 -2
  48. universal_mcp/applications/sharepoint/app.py +1 -0
  49. universal_mcp/applications/shopify/app.py +1 -0
  50. universal_mcp/applications/slack/app.py +3 -3
  51. universal_mcp/applications/trello/app.py +9 -27
  52. universal_mcp/applications/twilio/__init__.py +1 -0
  53. universal_mcp/applications/{twillo → twilio}/app.py +2 -2
  54. universal_mcp/applications/twitter/README.md +1 -1
  55. universal_mcp/applications/twitter/api_segments/dm_conversations_api.py +2 -2
  56. universal_mcp/applications/twitter/api_segments/lists_api.py +1 -1
  57. universal_mcp/applications/unipile/app.py +5 -1
  58. universal_mcp/applications/whatsapp/app.py +18 -17
  59. universal_mcp/applications/whatsapp/audio.py +110 -0
  60. universal_mcp/applications/whatsapp/whatsapp.py +398 -0
  61. universal_mcp/applications/whatsapp_business/app.py +1 -1
  62. universal_mcp/applications/youtube/app.py +195 -191
  63. universal_mcp/applications/zenquotes/app.py +1 -1
  64. {universal_mcp_applications-0.1.2.dist-info → universal_mcp_applications-0.1.3.dist-info}/METADATA +4 -2
  65. {universal_mcp_applications-0.1.2.dist-info → universal_mcp_applications-0.1.3.dist-info}/RECORD +76 -75
  66. universal_mcp/applications/google-ads/__init__.py +0 -1
  67. universal_mcp/applications/google-ads/app.py +0 -23
  68. universal_mcp/applications/twillo/README.md +0 -0
  69. universal_mcp/applications/twillo/__init__.py +0 -1
  70. /universal_mcp/applications/{domain-checker → domain_checker}/README.md +0 -0
  71. /universal_mcp/applications/{domain-checker → domain_checker}/__init__.py +0 -0
  72. /universal_mcp/applications/{ghost-content → ghost_content}/README.md +0 -0
  73. /universal_mcp/applications/{ghost-content → ghost_content}/__init__.py +0 -0
  74. /universal_mcp/applications/{google-searchconsole → google_searchconsole}/README.md +0 -0
  75. /universal_mcp/applications/{google-searchconsole → google_searchconsole}/__init__.py +0 -0
  76. /universal_mcp/applications/{http-tools → http_tools}/README.md +0 -0
  77. /universal_mcp/applications/{http-tools → http_tools}/__init__.py +0 -0
  78. /universal_mcp/applications/{google-ads → twilio}/README.md +0 -0
  79. {universal_mcp_applications-0.1.2.dist-info → universal_mcp_applications-0.1.3.dist-info}/WHEEL +0 -0
  80. {universal_mcp_applications-0.1.2.dist-info → universal_mcp_applications-0.1.3.dist-info}/licenses/LICENSE +0 -0
@@ -14,6 +14,7 @@ from pyairtable.api.types import (
14
14
  WritableFields,
15
15
  )
16
16
  from pyairtable.formulas import Formula, to_formula_str
17
+
17
18
  from universal_mcp.applications.application import APIApplication
18
19
  from universal_mcp.integrations import Integration
19
20
 
@@ -1,6 +1,7 @@
1
1
  from typing import Any
2
2
 
3
3
  from loguru import logger
4
+
4
5
  from universal_mcp.applications.application import APIApplication
5
6
  from universal_mcp.integrations import Integration
6
7
 
@@ -4,6 +4,7 @@ from typing import Any
4
4
 
5
5
  import boto3
6
6
  from botocore.exceptions import ClientError
7
+
7
8
  from universal_mcp.applications.application import BaseApplication
8
9
  from universal_mcp.integrations import Integration
9
10
 
@@ -22,7 +23,7 @@ class AwsS3App(BaseApplication):
22
23
  aws_secret_access_key (str, optional): AWS secret access key.
23
24
  region_name (str, optional): AWS region name.
24
25
  """
25
- super().__init__(name="aws-s3", integration=integration, **kwargs)
26
+ super().__init__(name="aws_s3", integration=integration, **kwargs)
26
27
  self._client = client
27
28
  self.integration = integration
28
29
 
@@ -135,9 +136,7 @@ class AwsS3App(BaseApplication):
135
136
  except ClientError:
136
137
  return False
137
138
 
138
- def list_prefixes(
139
- self, bucket_name: str, prefix: str | None = None
140
- ) -> list[str]:
139
+ def list_prefixes(self, bucket_name: str, prefix: str | None = None) -> list[str]:
141
140
  """
142
141
  Lists common prefixes ("folders") in the specified S3 bucket and prefix.
143
142
 
@@ -244,7 +244,7 @@ class BillApp(APIApplication):
244
244
  HTTPStatusError: Raised when the API request fails with detailed error information including status code and response body.
245
245
 
246
246
  Tags:
247
- bills
247
+ bills, , important
248
248
  """
249
249
  url = f"{self.base_url}/v3/bills"
250
250
  query_params = {
@@ -356,7 +356,7 @@ class BillApp(APIApplication):
356
356
  HTTPStatusError: Raised when the API request fails with detailed error information including status code and response body.
357
357
 
358
358
  Tags:
359
- bills
359
+ bills, important
360
360
  """
361
361
  if billId is None:
362
362
  raise ValueError("Missing required parameter 'billId'.")
@@ -2927,7 +2927,7 @@ class BillApp(APIApplication):
2927
2927
  HTTPStatusError: Raised when the API request fails with detailed error information including status code and response body.
2928
2928
 
2929
2929
  Tags:
2930
- customers
2930
+ customers, important
2931
2931
  """
2932
2932
  if customerId is None:
2933
2933
  raise ValueError("Missing required parameter 'customerId'.")
@@ -3155,9 +3155,7 @@ class BoxApp(APIApplication):
3155
3155
  except ValueError:
3156
3156
  return None
3157
3157
 
3158
- def delete_folders_id(
3159
- self, folder_id: str, recursive: bool | None = None
3160
- ) -> Any:
3158
+ def delete_folders_id(self, folder_id: str, recursive: bool | None = None) -> Any:
3161
3159
  """
3162
3160
  Delete folder
3163
3161
 
@@ -11630,9 +11628,7 @@ class BoxApp(APIApplication):
11630
11628
  except ValueError:
11631
11629
  return None
11632
11630
 
11633
- def create_shield_barriers(
11634
- self, enterprise: Any | None = None
11635
- ) -> dict[str, Any]:
11631
+ def create_shield_barriers(self, enterprise: Any | None = None) -> dict[str, Any]:
11636
11632
  """
11637
11633
  Create shield information barrier
11638
11634
 
@@ -927,9 +927,7 @@ class BrazeApp(APIApplication):
927
927
  except ValueError:
928
928
  return None
929
929
 
930
- def add_email_to_blocklist(
931
- self, email: list[str] | None = None
932
- ) -> dict[str, Any]:
930
+ def add_email_to_blocklist(self, email: list[str] | None = None) -> dict[str, Any]:
933
931
  """
934
932
  Blocklist Email Addresses
935
933
 
@@ -2367,9 +2365,7 @@ class BrazeApp(APIApplication):
2367
2365
  except ValueError:
2368
2366
  return None
2369
2367
 
2370
- def list_scheduled_broadcasts(
2371
- self, end_time: str | None = None
2372
- ) -> dict[str, Any]:
2368
+ def list_scheduled_broadcasts(self, end_time: str | None = None) -> dict[str, Any]:
2373
2369
  """
2374
2370
  List Upcoming Scheduled Campaigns and Canvases
2375
2371
 
@@ -6,7 +6,7 @@ from universal_mcp.integrations import Integration
6
6
 
7
7
  class CalComV2App(APIApplication):
8
8
  def __init__(self, integration: Integration = None, **kwargs) -> None:
9
- super().__init__(name="cal-com-v2", integration=integration, **kwargs)
9
+ super().__init__(name="cal_com_v2", integration=integration, **kwargs)
10
10
  self.base_url = "https://api.cal.com"
11
11
 
12
12
  def get_provider_details(self, clientId: str) -> dict[str, Any]:
@@ -34,9 +34,7 @@ class CalComV2App(APIApplication):
34
34
  self._handle_response(response)
35
35
  )
36
36
 
37
- def get_provider_access_token(
38
- self, clientId: str
39
- ) -> dict[str, Any]:
37
+ def get_provider_access_token(self, clientId: str) -> dict[str, Any]:
40
38
  """
41
39
  Retrieves an access token for the specified client ID using a GET request.
42
40
 
@@ -215,9 +213,7 @@ class CalComV2App(APIApplication):
215
213
  self._handle_response(response)
216
214
  )
217
215
 
218
- def get_oauth_client_user_by_id(
219
- self, clientId: str, userId: str
220
- ) -> dict[str, Any]:
216
+ def get_oauth_client_user_by_id(self, clientId: str, userId: str) -> dict[str, Any]:
221
217
  """
222
218
  Retrieves user-specific information associated with an OAuth client using the provided client ID and user ID.
223
219
 
@@ -307,9 +303,7 @@ class CalComV2App(APIApplication):
307
303
  self._handle_response(response)
308
304
  )
309
305
 
310
- def delete_user_by_client_id_id(
311
- self, clientId: str, userId: str
312
- ) -> dict[str, Any]:
306
+ def delete_user_by_client_id_id(self, clientId: str, userId: str) -> dict[str, Any]:
313
307
  """
314
308
  Removes a user's association with an OAuth client identified by the client ID and user ID.
315
309
 
@@ -337,9 +331,7 @@ class CalComV2App(APIApplication):
337
331
  self._handle_response(response)
338
332
  )
339
333
 
340
- def force_refresh_user(
341
- self, clientId: str, userId: str
342
- ) -> dict[str, Any]:
334
+ def force_refresh_user(self, clientId: str, userId: str) -> dict[str, Any]:
343
335
  """
344
336
  Forces a refresh for the OAuth client's user session, invalidating existing tokens and generating new ones.
345
337
 
@@ -797,9 +789,7 @@ class CalComV2App(APIApplication):
797
789
  self._handle_response(response)
798
790
  )
799
791
 
800
- def delete_org_attribute(
801
- self, orgId: str, attributeId: str
802
- ) -> dict[str, Any]:
792
+ def delete_org_attribute(self, orgId: str, attributeId: str) -> dict[str, Any]:
803
793
  """
804
794
  Deletes a specified attribute from an organization using the provided orgId and attributeId path parameters.
805
795
 
@@ -874,9 +864,7 @@ class CalComV2App(APIApplication):
874
864
  self._handle_response(response)
875
865
  )
876
866
 
877
- def get_org_attribute_options(
878
- self, orgId: str, attributeId: str
879
- ) -> dict[str, Any]:
867
+ def get_org_attribute_options(self, orgId: str, attributeId: str) -> dict[str, Any]:
880
868
  """
881
869
  Retrieves options for a specific attribute within an organization using the "GET" method at the "/v2/organizations/{orgId}/attributes/{attributeId}/options" endpoint.
882
870
 
@@ -1039,9 +1027,7 @@ class CalComV2App(APIApplication):
1039
1027
  self._handle_response(response)
1040
1028
  )
1041
1029
 
1042
- def get_user_org_attribute_options(
1043
- self, orgId: str, userId: str
1044
- ) -> dict[str, Any]:
1030
+ def get_user_org_attribute_options(self, orgId: str, userId: str) -> dict[str, Any]:
1045
1031
  """
1046
1032
  Retrieves attribute options for a specified user within an organization using the "GET" method.
1047
1033
 
@@ -1507,9 +1493,7 @@ class CalComV2App(APIApplication):
1507
1493
  self._handle_response(response)
1508
1494
  )
1509
1495
 
1510
- def get_org_membership_by_id(
1511
- self, orgId: str, membershipId: str
1512
- ) -> dict[str, Any]:
1496
+ def get_org_membership_by_id(self, orgId: str, membershipId: str) -> dict[str, Any]:
1513
1497
  """
1514
1498
  Retrieves membership details for a specific organization membership using the provided organization ID and membership ID.
1515
1499
 
@@ -1704,9 +1688,7 @@ class CalComV2App(APIApplication):
1704
1688
  self._handle_response(response)
1705
1689
  )
1706
1690
 
1707
- def get_user_schedule(
1708
- self, orgId: str, userId: str
1709
- ) -> dict[str, Any]:
1691
+ def get_user_schedule(self, orgId: str, userId: str) -> dict[str, Any]:
1710
1692
  """
1711
1693
  Retrieves a user's schedule for a specific organization using the GET method.
1712
1694
 
@@ -2013,9 +1995,7 @@ class CalComV2App(APIApplication):
2013
1995
  self._handle_response(response)
2014
1996
  )
2015
1997
 
2016
- def get_organization_team_by_id(
2017
- self, orgId: str, teamId: str
2018
- ) -> dict[str, Any]:
1998
+ def get_organization_team_by_id(self, orgId: str, teamId: str) -> dict[str, Any]:
2019
1999
  """
2020
2000
  Retrieves information about a specific team within an organization using the organization and team IDs.
2021
2001
 
@@ -2043,9 +2023,7 @@ class CalComV2App(APIApplication):
2043
2023
  self._handle_response(response)
2044
2024
  )
2045
2025
 
2046
- def delete_team_by_id(
2047
- self, orgId: str, teamId: str
2048
- ) -> dict[str, Any]:
2026
+ def delete_team_by_id(self, orgId: str, teamId: str) -> dict[str, Any]:
2049
2027
  """
2050
2028
  Deletes a specific team within an organization and returns a success status upon completion.
2051
2029
 
@@ -2838,9 +2816,7 @@ class CalComV2App(APIApplication):
2838
2816
  response = self._get(url, params=query_params)
2839
2817
  return Getbookingbyuidresponse.model_validate(self._handle_response(response))
2840
2818
 
2841
- def reschedule_booking_by_uid(
2842
- self, bookingUid: str
2843
- ) -> dict[str, Any]:
2819
+ def reschedule_booking_by_uid(self, bookingUid: str) -> dict[str, Any]:
2844
2820
  """
2845
2821
  Reschedules an existing booking identified by its unique `bookingUid`, using the `POST` method at the "/v2/bookings/{bookingUid}/reschedule" endpoint.
2846
2822
 
@@ -3341,9 +3317,7 @@ class CalComV2App(APIApplication):
3341
3317
  self._handle_response(response)
3342
3318
  )
3343
3319
 
3344
- def conferencing_controller_connect(
3345
- self, app: str
3346
- ) -> dict[str, Any]:
3320
+ def conferencing_controller_connect(self, app: str) -> dict[str, Any]:
3347
3321
  """
3348
3322
  Establishes a connection for conferencing using the specified application via the POST method at the "/v2/conferencing/{app}/connect" endpoint.
3349
3323
 
@@ -3452,9 +3426,7 @@ class CalComV2App(APIApplication):
3452
3426
  response = self._get(url, params=query_params)
3453
3427
  return Listconferencingresponse.model_validate(self._handle_response(response))
3454
3428
 
3455
- def conferencing_controller_default(
3456
- self, app: str
3457
- ) -> dict[str, Any]:
3429
+ def conferencing_controller_default(self, app: str) -> dict[str, Any]:
3458
3430
  """
3459
3431
  Sets the default conferencing application for the specified app identifier.
3460
3432
 
@@ -3823,9 +3795,7 @@ class CalComV2App(APIApplication):
3823
3795
  self._handle_response(response)
3824
3796
  )
3825
3797
 
3826
- def get_webhook_by_id(
3827
- self, eventTypeId: str, webhookId: str
3828
- ) -> dict[str, Any]:
3798
+ def get_webhook_by_id(self, eventTypeId: str, webhookId: str) -> dict[str, Any]:
3829
3799
  """
3830
3800
  Retrieves details about a specific webhook for a given event type using the provided event type ID and webhook ID.
3831
3801
 
@@ -4366,9 +4336,7 @@ class CalComV2App(APIApplication):
4366
4336
  self._handle_response(response)
4367
4337
  )
4368
4338
 
4369
- def stripe_controller_save(
4370
- self, state: str, code: str
4371
- ) -> dict[str, Any]:
4339
+ def stripe_controller_save(self, state: str, code: str) -> dict[str, Any]:
4372
4340
  """
4373
4341
  Retrieves a Stripe resource using a state and code query parameter and returns the result upon successful authentication.
4374
4342
 
@@ -4551,9 +4519,7 @@ class CalComV2App(APIApplication):
4551
4519
  self._handle_response(response)
4552
4520
  )
4553
4521
 
4554
- def teams_controller_get_team(
4555
- self, teamId: str
4556
- ) -> dict[str, Any]:
4522
+ def teams_controller_get_team(self, teamId: str) -> dict[str, Any]:
4557
4523
  """
4558
4524
  Retrieves information about a team specified by the team ID using the GET method.
4559
4525
 
@@ -4672,9 +4638,7 @@ class CalComV2App(APIApplication):
4672
4638
  self._handle_response(response)
4673
4639
  )
4674
4640
 
4675
- def teams_controller_delete_team(
4676
- self, teamId: str
4677
- ) -> dict[str, Any]:
4641
+ def teams_controller_delete_team(self, teamId: str) -> dict[str, Any]:
4678
4642
  """
4679
4643
  Deletes a specified team using the provided team ID.
4680
4644
 
@@ -5089,9 +5053,7 @@ class CalComV2App(APIApplication):
5089
5053
  self._handle_response(response)
5090
5054
  )
5091
5055
 
5092
- def get_membership_by_id(
5093
- self, teamId: str, membershipId: str
5094
- ) -> dict[str, Any]:
5056
+ def get_membership_by_id(self, teamId: str, membershipId: str) -> dict[str, Any]:
5095
5057
  """
5096
5058
  Retrieves the membership details for a specific user in a team using the provided membership ID.
5097
5059
 
@@ -5341,9 +5303,7 @@ class CalComV2App(APIApplication):
5341
5303
  self._handle_response(response)
5342
5304
  )
5343
5305
 
5344
- def webhooks_controller_get_webhook(
5345
- self, webhookId: str
5346
- ) -> dict[str, Any]:
5306
+ def webhooks_controller_get_webhook(self, webhookId: str) -> dict[str, Any]:
5347
5307
  """
5348
5308
  Retrieves information about a specific webhook identified by its ID using the "GET" method.
5349
5309
 
@@ -5368,9 +5328,7 @@ class CalComV2App(APIApplication):
5368
5328
  self._handle_response(response)
5369
5329
  )
5370
5330
 
5371
- def delete_user_webhook_by_id(
5372
- self, webhookId: str
5373
- ) -> dict[str, Any]:
5331
+ def delete_user_webhook_by_id(self, webhookId: str) -> dict[str, Any]:
5374
5332
  """
5375
5333
  Deletes a webhook by its ID using the DELETE method at the "/v2/webhooks/{webhookId}" path, removing the specified webhook endpoint.
5376
5334
 
@@ -1,6 +1,7 @@
1
1
  from typing import Any
2
2
 
3
3
  import httpx
4
+
4
5
  from universal_mcp.applications.application import APIApplication
5
6
  from universal_mcp.integrations import Integration
6
7
 
@@ -2,7 +2,8 @@ from collections.abc import Callable
2
2
  from typing import Any
3
3
 
4
4
  from loguru import logger
5
- from universal_mcp.applications import GraphQLApplication
5
+
6
+ from universal_mcp.applications.application import GraphQLApplication
6
7
  from universal_mcp.exceptions import NotAuthorizedError
7
8
  from universal_mcp.integrations import Integration
8
9
 
@@ -14,10 +15,10 @@ class ContentfulApp(GraphQLApplication):
14
15
  **kwargs: Any,
15
16
  ) -> None:
16
17
  self.space_id: str | None = None
17
- self.environment_id: str = "master" # Default Contentful environment
18
+ self.environment_id: str = "master"
18
19
  self._access_token: str | None = None
19
- self._is_eu_customer: bool = False # Default data center
20
- self._credentials_loaded: bool = False # Flag for lazy loading
20
+ self._is_eu_customer: bool = False
21
+ self._credentials_loaded: bool = False
21
22
  default_base_url = "https://graphql.contentful.com"
22
23
 
23
24
  super().__init__(
@@ -63,9 +64,7 @@ class ContentfulApp(GraphQLApplication):
63
64
  self._credentials_loaded = True # Prevent retries
64
65
  return False
65
66
 
66
- # --- Extract Credentials ---
67
67
  self.space_id = credentials.get("space_id")
68
- # Prefer access_token, fallback to api_key for naming flexibility
69
68
  self._access_token = credentials.get("access_token") or credentials.get(
70
69
  "api_key"
71
70
  )
@@ -76,7 +75,6 @@ class ContentfulApp(GraphQLApplication):
76
75
  "is_eu_customer", False
77
76
  ) # Use default if not specified
78
77
 
79
- # --- Validate Required Credentials ---
80
78
  missing_creds = []
81
79
  if not self.space_id:
82
80
  missing_creds.append("'space_id'")
@@ -91,20 +89,13 @@ class ContentfulApp(GraphQLApplication):
91
89
  self._credentials_loaded = True # Prevent retries
92
90
  return False
93
91
 
94
- # --- Construct Final Base URL ---
95
92
  contentful_api_domain = (
96
93
  "graphql.eu.contentful.com"
97
94
  if self._is_eu_customer
98
95
  else "graphql.contentful.com"
99
96
  )
100
- # Update self.base_url which was initially set to the default by super().__init__
101
97
  self.base_url = f"https://{contentful_api_domain}/content/v1/spaces/{self.space_id}/environments/{self.environment_id}"
102
98
 
103
- # --- Force GraphQL Client Re-initialization ---
104
- # Reset the internal client instance of the base class.
105
- # The next time self.client property is accessed (e.g., in self.query),
106
- # it will be recreated using the new self.base_url and fresh headers
107
- # obtained via self._get_headers() (which will now find self._access_token).
108
99
  self._client = None
109
100
 
110
101
  logger.info(
@@ -115,11 +106,6 @@ class ContentfulApp(GraphQLApplication):
115
106
  self._credentials_loaded = True
116
107
  return True
117
108
 
118
- # We rely on the base GraphQLApplication._get_headers() which looks for
119
- # 'access_token' or 'api_key' and creates the Bearer token header.
120
- # No override needed here as long as _load_credentials_and_construct_url
121
- # correctly populates self._access_token before the client is used.
122
-
123
109
  @staticmethod
124
110
  def _to_camel_case(s: str) -> str:
125
111
  """Converts a string to camelCase based on Contentful's typical ID to GraphQL name conversion."""
@@ -340,6 +326,9 @@ class ContentfulApp(GraphQLApplication):
340
326
 
341
327
  Returns:
342
328
  The result of the query, or an error dictionary.
329
+
330
+ Tags:
331
+ important
343
332
  """
344
333
  if not self._ensure_loaded():
345
334
  return {
@@ -248,9 +248,7 @@ class DigitaloceanApp(APIApplication):
248
248
  except ValueError:
249
249
  return None
250
250
 
251
- def ssh_keys_update(
252
- self, ssh_key_identifier: str, name: str | None = None
253
- ) -> Any:
251
+ def ssh_keys_update(self, ssh_key_identifier: str, name: str | None = None) -> Any:
254
252
  """
255
253
  Update an SSH Key's Name
256
254
 
@@ -331,9 +329,7 @@ class DigitaloceanApp(APIApplication):
331
329
  except ValueError:
332
330
  return None
333
331
 
334
- def actions_list(
335
- self, per_page: int | None = None, page: int | None = None
336
- ) -> Any:
332
+ def actions_list(self, per_page: int | None = None, page: int | None = None) -> Any:
337
333
  """
338
334
  List All Actions
339
335
 
@@ -5055,9 +5051,7 @@ class DigitaloceanApp(APIApplication):
5055
5051
  except ValueError:
5056
5052
  return None
5057
5053
 
5058
- def domains_list(
5059
- self, per_page: int | None = None, page: int | None = None
5060
- ) -> Any:
5054
+ def domains_list(self, per_page: int | None = None, page: int | None = None) -> Any:
5061
5055
  """
5062
5056
  List All Domains
5063
5057
 
@@ -7266,9 +7260,7 @@ class DigitaloceanApp(APIApplication):
7266
7260
  except ValueError:
7267
7261
  return None
7268
7262
 
7269
- def firewalls_delete_tags(
7270
- self, firewall_id: str, tags: Any | None = None
7271
- ) -> Any:
7263
+ def firewalls_delete_tags(self, firewall_id: str, tags: Any | None = None) -> Any:
7272
7264
  """
7273
7265
  Remove Tags from a Firewall
7274
7266
 
@@ -9618,9 +9610,7 @@ class DigitaloceanApp(APIApplication):
9618
9610
  except ValueError:
9619
9611
  return None
9620
9612
 
9621
- def kubernetes_remove_registry(
9622
- self, cluster_uuids: list[str] | None = None
9623
- ) -> Any:
9613
+ def kubernetes_remove_registry(self, cluster_uuids: list[str] | None = None) -> Any:
9624
9614
  """
9625
9615
  Remove Container Registry from Kubernetes Clusters
9626
9616
 
@@ -14015,9 +14005,7 @@ class DigitaloceanApp(APIApplication):
14015
14005
  except ValueError:
14016
14006
  return None
14017
14007
 
14018
- def regions_list(
14019
- self, per_page: int | None = None, page: int | None = None
14020
- ) -> Any:
14008
+ def regions_list(self, per_page: int | None = None, page: int | None = None) -> Any:
14021
14009
  """
14022
14010
  List All Data Center Regions
14023
14011
 
@@ -15314,9 +15302,7 @@ class DigitaloceanApp(APIApplication):
15314
15302
  except ValueError:
15315
15303
  return None
15316
15304
 
15317
- def sizes_list(
15318
- self, per_page: int | None = None, page: int | None = None
15319
- ) -> Any:
15305
+ def sizes_list(self, per_page: int | None = None, page: int | None = None) -> Any:
15320
15306
  """
15321
15307
  List All Droplet Sizes
15322
15308
 
@@ -15764,9 +15750,7 @@ class DigitaloceanApp(APIApplication):
15764
15750
  except ValueError:
15765
15751
  return None
15766
15752
 
15767
- def tags_list(
15768
- self, per_page: int | None = None, page: int | None = None
15769
- ) -> Any:
15753
+ def tags_list(self, per_page: int | None = None, page: int | None = None) -> Any:
15770
15754
  """
15771
15755
  List All Tags
15772
15756
 
@@ -16622,9 +16606,7 @@ class DigitaloceanApp(APIApplication):
16622
16606
  except ValueError:
16623
16607
  return None
16624
16608
 
16625
- def vpcs_list(
16626
- self, per_page: int | None = None, page: int | None = None
16627
- ) -> Any:
16609
+ def vpcs_list(self, per_page: int | None = None, page: int | None = None) -> Any:
16628
16610
  """
16629
16611
  List All VPCs
16630
16612
 
@@ -4,6 +4,7 @@ from typing import Any
4
4
 
5
5
  import dns.resolver
6
6
  import requests
7
+
7
8
  from universal_mcp.applications.application import APIApplication
8
9
  from universal_mcp.integrations import Integration
9
10
 
@@ -45,7 +46,7 @@ class DomainCheckerApp(APIApplication):
45
46
  """
46
47
 
47
48
  def __init__(self, integration: Integration = None, **kwargs) -> None:
48
- super().__init__(name="domain-checker", integration=integration, **kwargs)
49
+ super().__init__(name="domain_checker", integration=integration, **kwargs)
49
50
 
50
51
  async def get_rdap_data(self, domain: str) -> dict[str, Any] | None:
51
52
  """Get RDAP data for a domain"""